package com.csap.framework.apidoc.admin.engine;

import com.csap.framework.util.FileUtil;
import com.csap.framework.util.FinalConfigParam;
import freemarker.template.Configuration;
import freemarker.template.Template;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.Map;

/**
 * @author yangchengfu
 * @description Freemarker模板
 * @dataTime 2021年-02月-28日 19:19:00
 **/
@Component
@Slf4j
public class FreemarkerEngine {

    private Configuration configuration;

    public FreemarkerEngine() {
        init();
    }

    public void init() {
        configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
        configuration.setDefaultEncoding("UTF-8");
        configuration.setClassForTemplateLoading(FreemarkerEngine.class, "/template");
    }

    /**
     * 输出文件数据
     *
     * @param objectMap    输入的数据
     * @param templatePath 模板路径
     * @param outputFile   输出文件路径
     * @throws Exception
     */
    public void writer(Map<String, Object> objectMap, String templatePath, String outputFile) throws Exception {
        FileUtil.makeDirectory(outputFile);
        Template template = configuration.getTemplate(templatePath);
        try (FileOutputStream fileOutputStream = new FileOutputStream(outputFile)) {
            template.process(objectMap, new OutputStreamWriter(fileOutputStream, FinalConfigParam.DEFAULT_CHARSET));
        }
        log.debug("模板:" + templatePath + ";  文件:" + outputFile);
    }

    /**
     * 模板真实文件路径
     *
     * @param filePath 文件路径
     * @return string
     */
    public String templateFilePath(String filePath) {
        return filePath + ".ftl";
    }

}
